﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web.UI.WebControls;
using App_Code.consultasSql.ConsultasSeguridad;
using consultasSql.consultaAbm.Impresion;
using consultasSql.consultasVarias;
using consultasSql.generic.Accesorio;
using consultasSql.generic.Insumo;
using validarDatos;

public partial class Stdby_ABM_impresiones : System.Web.UI.Page
{
    /*Mensajes*/
    private void mostrarMensaje(string mensaje)
    {
        System.Text.StringBuilder sbMensaje = new System.Text.StringBuilder();

        sbMensaje.Append("<script type='text/javascript'>");
        sbMensaje.AppendFormat("alert('{0}');", mensaje);
        sbMensaje.Append("</script>");
        ClientScript.RegisterClientScriptBlock(this.GetType(), "Mensaje", sbMensaje.ToString());
    }

    /*-----------*/

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            cargarCombos();
            cargarListas();

            cargarGrilla(false, "", "", "", "");
            ViewState["ordenarGrilla"] = "ASC";
        }

        Usuarios usuario = (Usuarios)Session["Usuario"];
        if (usuario != null)
        {
            btnGuardar.Enabled = usuario.VerificarPermisoUsuario("ABM", false, true);
        }
    }

    //cargar combos
    private void cargarCombos()
    {
        CObtenerTodos obtenerTodos = new CObtenerTodos();
        CConsultaInsumo consultaInsumo = new CConsultaInsumo();

        //Material
        cboMaterial.DataSource = new CConsultaInsumo().obtenerInsumoPorTipoInsumoId(TipoInsumo.MaterialPapel);
        cboMaterial.Enabled = true;
        cboMaterial.DataTextField = "descripcion";
        cboMaterial.DataValueField = "id";
        cboMaterial.DataBind();

        //Gramaje
        cboGramaje.DataSource = new CConsultaInsumo().obtenerInsumoPorTipoInsumoId(TipoInsumo.GramajePapel);
        cboGramaje.Enabled = true;
        cboGramaje.DataTextField = "descripcion";
        cboGramaje.DataValueField = "id";
        cboGramaje.DataBind();

        //BocaImpresiones
        cboBoca.DataSource = consultaInsumo.obtenerInsumoPorTipoInsumoId(TipoInsumo.BocaImpresiones);
        cboBoca.DataTextField = "descripcion";
        cboBoca.DataValueField = "id";
        cboBoca.DataBind();

        //Colores de Impresión
        cboColoresDeImpresion.DataSource = consultaInsumo.obtenerInsumoPorTipoInsumoId(TipoInsumo.CantidadColoresImpresion);
        cboColoresDeImpresion.DataTextField = "descripcion";
        cboColoresDeImpresion.DataValueField = "id";
        cboColoresDeImpresion.DataBind();

        //Faz
        cboFaz.DataSource = consultaInsumo.obtenerInsumoPorTipoInsumoId(TipoInsumo.Faz);
        cboFaz.DataTextField = "descripcion";
        cboFaz.DataValueField = "id";
        cboFaz.DataBind();
    }

    private void cargarListas()
    {
        CConsultaInsumo consultaInsumo = new CConsultaInsumo();

        //Tintas
        lstTintas.DataSource = consultaInsumo.obtenerInsumoPorTipoInsumoId(TipoInsumo.Tinta);
        lstTintas.DataTextField = "descripcion";
        lstTintas.DataValueField = "id";
        lstTintas.DataBind();
    }

    # region Métodos Grilla
    protected void grilla_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Attributes["onmouseover"] = "javascript:setMouseOverColor(this);";
            e.Row.Attributes["onmouseout"] = "javascript:setMouseOutColor(this);";
        }
    }

    //cargo grilla
    private void cargarGrilla(bool estado, string descripcion, string largo, string ancho, string ordenar)
    {
        try
        {
            Session["dsResultadoGrilla"] = new CConsultaImpresion().select(estado, descripcion, largo, ancho, ordenar);
            grilla.DataSource = Session["dsResultadoGrilla"];
            grilla.DataBind();
        }
        catch { }
    }

    //cambio de pagina grilla
    protected void grilla_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            grilla.PageIndex = e.NewPageIndex;
            cargarGrilla(seleccionDeBaja(), txtDescripcionBuscar.Text, txtLargoBuscar.Text, txtAnchoBuscar.Text, "");
        }
        catch { }
    }

    //ordenar grilla
    protected void grilla_Sorting(object sender, GridViewSortEventArgs e)
    {
        try
        {
            cargarGrilla(seleccionDeBaja(), txtDescripcionBuscar.Text, txtLargoBuscar.Text, txtAnchoBuscar.Text, e.SortExpression + " " + ordenarGrilla());
        }
        catch { }
    }

    private string ordenarGrilla()
    {
        try
        {
            if (!String.IsNullOrEmpty(ViewState["ordenarGrilla"].ToString()))
                ViewState["ordenarGrilla"] = (ViewState["ordenarGrilla"].ToString() == "DESC" ? "ASC" : "DESC");
            else
                ViewState["ordenarGrilla"] = "ASC";
        }
        catch { }

        return ViewState["ordenarGrilla"].ToString();
    }

    //refrescar
    protected void refrescar()
    {
        try
        {
            int paginaActual = grilla.PageIndex; //guardo la pagina actual

            cargarGrilla(seleccionDeBaja(), txtDescripcionBuscar.Text, txtLargoBuscar.Text, txtAnchoBuscar.Text, "");

            grilla.PageIndex = paginaActual; //cargo el número de la pagina cargada
        }
        catch { }
    }

    # endregion

    //selección De Baja
    private bool seleccionDeBaja()
    {
        bool estado = false;

        switch (cboInactivoBuscar.SelectedIndex)
        {
            case 0:
                estado = false;
                break;
            case 1:
                estado = true;
                break;
        }

        return estado;
    }

    //buscar
    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        cargarGrilla(seleccionDeBaja(), txtDescripcionBuscar.Text, txtLargoBuscar.Text, txtAnchoBuscar.Text, "");
    }

    //cancelar
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        limpiarCampos();
        grilla.SelectedIndex = -1;
        lblNuevo.Text = "Nuevo";
    }

    //modificar
    protected void grilla_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            if (!(Convert.ToString(Session["filaSeleccionada"]) == Convert.ToString(grilla.SelectedIndex)))
            {
                cargarCampos();
                lblNuevo.Text = "Modificar";
            }
            else
            {
                lblNuevo.Text = "Nuevo";
                limpiarCampos();
            }

        }
        catch { }
    }


    private void cargarCampos()
    {
        try
        {
            grilla.DataSource = Session["dsResultadoGrilla"];
            if (grilla.SelectedRow != null)
            {
                Session["filaSeleccionada"] = grilla.SelectedIndex.ToString();
                int indexSelected = int.Parse(Session["filaSeleccionada"].ToString());

                txtDescripcion.Text = ((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["descripcion"].ToString();
                txtTipoDeTrabajo.Text = ((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["tipoDeTrabajo"].ToString();

                string insumoTipoMaterialId = (((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["insumoTipoMaterialId"].ToString());
                cboMaterial.SelectedIndex = cboMaterial.Items.IndexOf(cboMaterial.Items.FindByValue(insumoTipoMaterialId));

                string insumoGramajeId = (((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["insumoGramajeId"].ToString());
                cboGramaje.SelectedIndex = cboGramaje.Items.IndexOf(cboGramaje.Items.FindByValue(insumoGramajeId));

                txtLargo.Text = (((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["pliegoLargo"].ToString());
                txtAncho.Text = (((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["pliegoAncho"].ToString());

                string insumoCantidadColoresImpresionId = (((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["insumoCantidadColoresImpresionId"].ToString());
                cboColoresDeImpresion.SelectedIndex = cboColoresDeImpresion.Items.IndexOf(cboColoresDeImpresion.Items.FindByValue(insumoCantidadColoresImpresionId));

                string insumoBocaId = (((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["insumoBocaId"].ToString());
                cboBoca.SelectedIndex = cboBoca.Items.IndexOf(cboBoca.Items.FindByValue(insumoBocaId));

                CObtenerTodos cObtenerTodos = new CObtenerTodos();
                DataSet dsTintas = cObtenerTodos.obtenerTodosPorFK("Impresiones_Tintas", "objetoId", (((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["id"].ToString()));
                if (dsTintas != null)
                {
                    lstTintas.Enabled = true;
                    for (int i = 0; i < (dsTintas).Tables[0].Rows.Count; i++)
                    {
                        string tintaId = (dsTintas).Tables[0].Rows[i]["insumoId"].ToString();
                        
                        foreach (ListItem item in lstTintas.Items)
                        {
                            if (item.Value == tintaId.ToString())
                                item.Selected = true;
                        }
                    }
                }

                string fazId = (((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["fazId"].ToString());
                cboFaz.SelectedIndex = cboFaz.Items.IndexOf(cboFaz.Items.FindByValue(fazId));

                chkBarnizUV.Checked = bool.Parse(((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["barnizUV"].ToString());
                if (chkBarnizUV.Checked)
                {
                    txtCosto.Enabled = true;
                    txtCosto.Text = (((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["costo"].ToString());
                }
                else
                {

                    txtCosto.Text = "";
                    txtCosto.Enabled = false;
                }

                chkInactivo.Enabled = true;
                chkInactivo.Checked = bool.Parse(((DataSet)Session["dsResultadoGrilla"]).Tables[0].Rows[indexSelected]["deBaja"].ToString());
            }
        }
        catch { }
    }

    private void limpiarCampos()
    {
        try
        {
            txtDescripcion.Text = "";
            txtDescripcion.ToolTip = null;
            lblDescripcion.Visible = false;

            txtLargo.Text = "";
            txtAncho.Text = "";
            txtAncho.ToolTip = null;
            txtLargo.ToolTip = null;
            lblPliego.Visible = false;

            txtTipoDeTrabajo.Text = "";
            txtTipoDeTrabajo.ToolTip = null;
            lblTipoDeTrabajo.Visible = false;

            txtCosto.Text = "";
            txtCosto.Enabled = false;
            txtCosto.ToolTip = null;
            lblCosto.Visible = false;

            cboMaterial.ClearSelection();
            cboMaterial.ToolTip = null;
            lblMaterial.Visible = false;

            cboGramaje.ClearSelection();
            cboGramaje.ToolTip = null;
            lblGramaje.Visible = false;

            cboBoca.ClearSelection();
            cboBoca.ToolTip = null;
            lblBoca.Visible = false;

            cboColoresDeImpresion.ClearSelection();
            cboColoresDeImpresion.ToolTip = null;
            lblColoresDeImpresion.Visible = false;

            cboFaz.ClearSelection();
            cboFaz.ToolTip = null;
            lblFaz.Visible = false;

            lstTintas.Enabled = false;
            lstTintas.ClearSelection();
            lstTintas.BackColor = System.Drawing.Color.White;
            lstTintas.ToolTip = null;

            chkBarnizUV.Checked = false;
            chkInactivo.Enabled = false;
            chkInactivo.Checked = false;

            grilla.SelectedIndex = -1;
            Session["filaSeleccionada"] = -1;
        }
        catch { }
    }


    //guardar
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        if (comprobarCampos())
            updateInsert();
        else
            mostrarMensaje(CMensajes.mensajeValidaUpdateInsert());
    }

    //comprobar campos
    private bool comprobarCampos()
    {
        bool bandera = true;

        try
        {
            # region Descripcion
            txtDescripcion.ToolTip = null;
            lblDescripcion.Visible = false;
            if (!CValidaDatos.validaPalabras(txtDescripcion.Text.Trim()) || String.IsNullOrEmpty(txtDescripcion.Text.Trim()))
            {
                txtDescripcion.ToolTip = CMensajes.mensajeValidaPalabra();
                lblDescripcion.Visible = true;
                bandera = false;
            }
            # endregion

            # region Material
            cboMaterial.ToolTip = null;
            lblMaterial.Visible = false;
            if (cboMaterial.SelectedItem == null || cboMaterial.SelectedItem.Text == "")
            {
                cboMaterial.ToolTip = CMensajes.mensajeValidaSeleccionComboBox();
                lblGramaje.Visible = true;
                bandera = false;
            }
            # endregion

            # region Gramaje
            cboGramaje.ToolTip = null;
            lblGramaje.Visible = false;
            if (cboGramaje.SelectedItem == null || cboGramaje.SelectedItem.Text=="")
            {
                cboGramaje.ToolTip = CMensajes.mensajeValidaSeleccionComboBox();
                lblGramaje.Visible = true;
                bandera = false;
            }
            # endregion

            # region Faz
            cboFaz.ToolTip = null;
            lblFaz.Visible = false;
            if (cboFaz.SelectedItem == null || cboFaz.SelectedItem.Text=="")
            {
                cboFaz.ToolTip = CMensajes.mensajeValidaSeleccionComboBox();
                lblFaz.Visible = true;
                bandera = false;
            }
            # endregion

            # region Pliego
            txtAncho.ToolTip = null;
            txtLargo.ToolTip = null;
            lblPliego.Visible = false;
            if (!CValidaDatos.validaDecimal(txtAncho.Text.Trim()) || String.IsNullOrEmpty(txtAncho.Text.Trim()))
            {
                txtAncho.ToolTip = CMensajes.mensajeValidaNumero();
                lblPliego.Visible = true;
                bandera = false;
            }

            if (!CValidaDatos.validaDecimal(txtLargo.Text.Trim()) || String.IsNullOrEmpty(txtLargo.Text.Trim()))
            {
                txtLargo.ToolTip = CMensajes.mensajeValidaNumero();
                lblPliego.Visible = true;
                bandera = false;
            }
            # endregion

            # region Colores de Impresión
            cboColoresDeImpresion.ToolTip = null;
            lblColoresDeImpresion.Visible = false;
            if (cboColoresDeImpresion.SelectedItem == null || cboColoresDeImpresion.SelectedItem.Text=="")
            {
                cboColoresDeImpresion.ToolTip = CMensajes.mensajeValidaSeleccionComboBox();
                lblColoresDeImpresion.Visible = true;
                bandera = false;
            }
            # endregion

            # region Tinta
            int cantidadTintasSeleccionadas = 0;
            lstTintas.BackColor = System.Drawing.Color.White;
            lstTintas.ToolTip = null;

            foreach (ListItem item in lstTintas.Items)
                if (item.Selected)
                    cantidadTintasSeleccionadas++;

            if ((cboColoresDeImpresion.SelectedItem.Value == Insumo.CantidadColoresImpresion_2.ToString() && cantidadTintasSeleccionadas != 2)
                || (cboColoresDeImpresion.SelectedItem.Value == Insumo.CantidadColoresImpresion_4.ToString() && cantidadTintasSeleccionadas != 4)
                || (cboColoresDeImpresion.SelectedItem.Value == Insumo.CantidadColoresImpresion_1.ToString() && cantidadTintasSeleccionadas != 1)
                || (cboColoresDeImpresion.SelectedItem.Value == Insumo.CantidadColoresImpresion_TODOS.ToString() && cantidadTintasSeleccionadas != lstTintas.Items.Count))
            {
                lstTintas.ToolTip = "Debe seleccionar la cantidad de Tintas correcta.";
                lstTintas.BackColor = System.Drawing.Color.Red;
                bandera = false;
            }
            # endregion

            # region Boca
            cboBoca.ToolTip = null;
            lblBoca.Visible = false;
            if (cboBoca.SelectedItem == null || cboBoca.SelectedItem.Text=="")
            {
                cboBoca.ToolTip = CMensajes.mensajeValidaSeleccionComboBox();
                lblBoca.Visible = true;
                bandera = false;
            }
            # endregion

            # region Tipo de Trabajo
            txtTipoDeTrabajo.ToolTip = null;
            lblTipoDeTrabajo.Visible = false;
            if (!CValidaDatos.validaPalabras(txtTipoDeTrabajo.Text.Trim()) || String.IsNullOrEmpty(txtTipoDeTrabajo.Text.Trim()))
            {
                txtTipoDeTrabajo.ToolTip = CMensajes.mensajeValidaPalabra();
                lblTipoDeTrabajo.Visible = true;
                bandera = false;
            }
            # endregion

            # region Barniz UV
            txtCosto.ToolTip = null;
            lblCosto.Visible = false;
            if (chkBarnizUV.Checked == true)
            {
                # region Costo
                if (!CValidaDatos.validaDecimal(txtCosto.Text.Trim()) || String.IsNullOrEmpty(txtCosto.Text.Trim()))
                {
                    txtCosto.ToolTip = CMensajes.mensajeValidaNumero();
                    lblCosto.Visible = true;
                    bandera = false;
                }

                # endregion
            }
            # endregion
        }
        catch
        {
            bandera = false;
        }

        return bandera;
    }

    //update o insertObjeto_Accesorios
    private void updateInsert()
    {
        try
        {
            CImpresion objeto = new CImpresion();

            objeto.deBaja = Convert.ToBoolean(chkInactivo.Checked);
            objeto.descripcion = txtDescripcion.Text;
            objeto.tipoDeTrabajo = txtTipoDeTrabajo.Text;

            # region Insumos
            objeto.insumoBoca = new CInsumo();
            objeto.insumoBoca.id = int.Parse(cboBoca.SelectedItem.Value);

            objeto.insumoCantidadColoresImpresion = new CInsumo();
            objeto.insumoCantidadColoresImpresion.id = int.Parse(cboColoresDeImpresion.SelectedItem.Value);

            objeto.insumoGramaje = new CInsumo();
            objeto.insumoGramaje.id = int.Parse(cboGramaje.SelectedItem.Value);

            objeto.insumoTipoMaterial = new CInsumo();
            objeto.insumoTipoMaterial.id = int.Parse(cboMaterial.SelectedItem.Value);

            objeto.insumoFaz = new CInsumo();
            objeto.insumoFaz.id = int.Parse(cboFaz.SelectedItem.Value);
            # endregion

            objeto.pliegoAncho = float.Parse(txtAncho.Text);
            objeto.pliegoLargo = float.Parse(txtLargo.Text);

            # region Tintas
            objeto.tintas = new List<CInsumo>();
            foreach (ListItem item in lstTintas.Items)
            {
                if (item.Selected)
                {
                    CInsumo tinta = new CInsumo();
                    tinta.id = int.Parse(item.Value);
                    objeto.tintas.Add(tinta);
                }
            }
            # endregion

            objeto.barnizUV = Convert.ToBoolean(chkBarnizUV.Checked);
            if (chkBarnizUV.Checked == true)
                objeto.costo = float.Parse(txtCosto.Text);

            CConsultaImpresion consulta = new CConsultaImpresion();

            if (grilla.SelectedRow != null)
            {
                objeto.id = Convert.ToInt32(grilla.DataKeys[grilla.SelectedRow.RowIndex].Value);

                if (consulta.update(objeto))
                {
                    mostrarMensaje(CMensajes.mensajeOperacionExitosa());
                    limpiarCampos();
                    refrescar();
                    lblNuevo.Text = "Nuevo";
                }
                else
                {
                    mostrarMensaje(CMensajes.mensajeOperacionFallida());
                }
            }
            else
            {
                if (consulta.insert(objeto))
                {
                    mostrarMensaje(CMensajes.mensajeOperacionExitosa());
                    limpiarCampos();
                    refrescar();
                }
                else
                {
                    mostrarMensaje(CMensajes.mensajeOperacionFallida());
                }
            }

        }
        catch
        {
            mostrarMensaje(CMensajes.mensajeOperacionFallida());
        }
    }

    # region Eventos Controles
    protected void chkBarnizUV_CheckedChanged(object sender, EventArgs e)
    {
        if (chkBarnizUV.Checked == true)
            txtCosto.Enabled = true;
        else
        {
            txtCosto.Enabled = false;
            txtCosto.Text = "";
        } 
    }

    protected void cboColoresDeImpresion_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cboColoresDeImpresion.SelectedItem.Value != "" && cboColoresDeImpresion.SelectedItem.Value != null)
        {
            if (cboColoresDeImpresion.SelectedItem.Value == Insumo.CantidadColoresImpresion_TODOS.ToString())
            {
                foreach (ListItem li in lstTintas.Items)
                    li.Selected = true;

                lstTintas.Enabled = false;
            }
            else
            {
                lstTintas.Enabled = true;
                lstTintas.ClearSelection();
            }
        }
        else
        {
            lstTintas.ClearSelection();
            lstTintas.Enabled = false;
        }
    }
    # endregion
}